from time import sleep
from typing import Generator
import re

def stream_process(input_stream):
    """
    流式处理 JSON 数据，解析字段、思考过程和最终结果。
    :param input_stream: 模拟输入流，逐块传入数据
    :return: 生成流式输出结果
    """
    # 正则匹配单个字段块
    pattern = re.compile(
        r'"(?P<field>[^"]+)"\s*:\s*\{\s*"思考过程"\s*:\s*"(?P<thinking>[^"]+)",\s*"最终结果"\s*:\s*"(?P<result>[^"]+)"\s*\}'
    )
    buffer = ""  # 缓存字符串
    for chunk in input_stream:  # 模拟流式输入
        buffer += chunk  # 将当前块追加到缓存中
        # 查找匹配的完整字段
        while match := pattern.search(buffer):
            field = match.group("field")
            thinking = match.group("thinking")
            result = match.group("result")

            # 生成流式 Markdown 输出
            yield f'<div class=item><strong>{field}</strong><span title={thinking}>🛈</span>:<div class="editable-content" contenteditable="true" data-original-content={result}>{result}</div></div>'

            # 更新缓冲区，去掉已处理部分
            buffer = buffer[match.end():]

        # 防止缓存无限增长
        if len(buffer) > 10240:
            buffer = buffer[-10240:]

# 测试代码
if __name__ == "__main__":
    # 模拟流式输入
    input_stream = """{ "主诉": {"思考过程": "患者主要关注的问题为手腕疼痛，特别是转动或提东西时，疼痛已持续三个星期。", "最终结果": "手腕疼痛3周，转动或提物时加重"}, "现病史": { "思考过程": "患者最近手腕疼痛，尤其是转动或提东西时，疼痛已持续三周，开始未重视，但最近疼痛加剧。患者否认有摔倒或手腕受到撞击，但经常打篮球，可能在运动中受伤。", "最终结果": "患者手腕疼痛3周，转动或提物时加重，无明显外伤史，但有篮球运动史" }, "既往史": {"思考过程": "患者否认之前有过类似的手腕疼痛。", "最终结果": "否认既往类似手腕疼痛史"}, "辅助检查结果": {"思考过程": "患者尚未进行X光检查。", "最终结果": "X光检查未做"}, "诊断": { "思考过程": "根据患者手腕疼痛的症状，尤其是运动后加剧，考虑可能的诊断包括但不限于软组织损伤、腕关节扭伤或骨折。", "最终结果": "1. 软组织损伤 2. 腕关节扭伤 3. 骨折" }, "离院建议": { "思考过程": "建议患者进行X光检查以排除骨折或其他骨骼问题，并在检查结果出来前避免手腕的剧烈运动。", "最终结果": "建议患者进行X光检查，检查结果出来前避免手腕剧烈运动，检查后根据结果进一步咨询" } }"""

    # 流式处理并输出
    for output in stream_process(input_stream):
        print(output, end="")

